﻿using ServerBase.Config;
using SvCore.CallOut;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Xml.Linq;

namespace SvGame.Logic;

public static partial class GameLogic
{
    public static int Perform自状态(this IRole me, ConfigPerform conf)
    {
        var PerformFuncSub = (EPerformFuncSub)conf.PerformFuncSub;
        switch (PerformFuncSub)
        {
            default:
                break;
        }

        switch (PerformFuncSub)
        {
            case EPerformFuncSub.自状态防御闪避:
                {
                    // 标记|系数技能|时间系数|防御系数|闪避系数
                    if (conf.Args.Count < 5)
                    {
                        loger.Error($"Perform自状态 {conf.Id} error 错误配置 Args");
                        return 1;
                    }
                    string flag = conf.Args[0];
                    if (me.Comb.PropsBuffFlags.Contains(flag))
                    {
                        return me.MessageError($"你已经在施法中了。");
                    }
                    var 技能等级 = me.SkillGetLevel(conf.Args[1]);
                    int 时间 = 技能等级 / conf.Args[2].ToInt();
                    int 防御 = 技能等级 / conf.Args[3].ToInt();
                    int 闪避 = 技能等级 / conf.Args[4].ToInt();
                    
                    me.Comb.PropsBuffFlags.Add(flag);
                    me.PropsBuffAdd(EProp.armor, 防御);
                    me.PropsBuffAdd(EProp.dodge, 闪避);

                    string descEnd = "";
                    if (!conf.DescEnd.IsNullOrEmpty())
                    {
                        descEnd = conf.DescEnd;
                    }
                    me.Callout(时间, Perform自状态Remove自状态防御闪避, flag, 防御, 闪避, descEnd);
                }
                break;
            default:
                break;
        }

        // 招式前描述
        if (!conf.DescPre.IsNullOrEmpty())
        {
            MessageVisionCombat(conf.DescPre, me);
        }

        return 0;
    }
    public static void Perform自状态Remove自状态防御闪避(IRole me, string flag, int 防御, int 闪避, string descEnd)
    {
        me.Comb.PropsBuffFlags.Remove(flag);
        me.PropsBuffAdd(EProp.armor, -防御);
        me.PropsBuffAdd(EProp.dodge, -闪避);
        if (!descEnd.IsNullOrEmpty())
        {
            MessageVisionCombat(descEnd, me);
        }
    }
}
